<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/1/8
 * Time: 13:59
 */
namespace app\common\lib\common;


class Redis
{

    private static $host = '120.78.67.1';//
    /*
     * 端口
     */
    private static $port = '6379';
    //备用主机
    private static $handler;

    public $set ='set';

    private static function handler()
    {
        if (!self::$handler) {
            self::$handler = new \Redis();
            self::$handler->connect(self::$host, self::$port);
        }
        return self::$handler;
    }

    /**
     * 设置
     * @param $key
     * @return bool|mixed|string
     */
    public static function get($key)
    {
        $value = self::handler()->get($key);
        $value_serl = @unserialize($value);
        if (is_object($value_serl) || is_array($value_serl)) {
            return $value_serl;
        }
        return $value;
    }

    /**
     * 获取值
     * @param $key
     * @param $value
     * @return bool
     */
    public static function set($key, $value, $time = null)
    {
        if (is_object($value) || is_array($value)) {
            $value = serialize($value);
        }
        return self::handler()->set($key, $value, $time);
    }

    /**
     * 入列  从左加入
     * @param $key
     * @param $value
     * @return int
     */
    public static function lpush($key, $value)
    {
        if (is_object($value) || is_array($value)) {
            $value = serialize($value);
        }
        return self::handler()->lpush($key, $value);
    }

    /**
     * 出列 左边出
     * @param $key
     * @return mixed|string
     */
    public static function lpop($key)
    {
        $value = self::handler()->lpop($key);
        $value_serl = @unserialize($value);
        if (is_object($value_serl) || is_array($value_serl)) {
            return $value_serl;
        }
        return $value;
    }

    /**
     * 入列  从右加入
     * @param $key
     * @param $value
     * @return int
     */
    public static function rpush($key, $value)
    {
        if (is_object($value) || is_array($value)) {
            $value = serialize($value);
        }
        return self::handler()->rpush($key, $value);

    }

    /**
     * 出列 右边出
     * @param $key
     * @return mixed|string
     */
    public static function rpop($key)
    {
        $value = self::handler()->rpop($key);
        $value_serl = @unserialize($value);
        if (is_object($value_serl) || is_array($value_serl)) {
            return $value_serl;
        }
        return $value;
    }


    /**
     * 获取对象集合
     * @param $key
     * @param int $s 开始下标
     * @param int $d 结束
     * @return array|mixed
     */
    public static function lrange($key, $s = 0, $d = 5)
    {
        $value = self::handler()->lrange($key, $s, $d);
        $value_serl = @unserialize($value);
        if (is_object($value_serl) || is_array($value_serl)) {
            return $value_serl;
        }
        return $value;
    }


    /**
     * @param $key
     * @return int
     * 删除
     */
    public static function del($key)
    {
        return self::handler()->del($key);
    }

    /**
     *  获取所有key
     */
    public static function allKey(){
        return self::handler()->getKeys('*');
    }

    // 获取list队列中剩余长度
    public static function lSize($key){
        return self::handler()->lSize($key);
    }

    /**
     * @param $key  string 有序集合key
     * @param $val string 有序集合值
     * @return int
     * //    redis 有序集合增加
     */
    public static function sAdd($key,$val){
        return self::handler()->sAdd($key,$val);
    }

    /**
     * @param $key string  有序集合key
     * @return array
     * 查询有序集合key中值
     */
    public static function sMembers($key){
        return self::handler()->sMembers($key);
    }

    /**
     * @param $key  string  有序集合key
     * @param $val  string  有序集合值
     * @return int
     * 删除有序集合
     */
    public static function sRem($key,$val){
        return self::handler()->sRem($key,$val);
    }



    //todo 可以优化为魔术方来执行可以减少代码量
    public function __call($name, $arguments)
    {
        return self::handler()->$name($arguments[0],$arguments[1]);
    }

}